perm filename GRAPH.SAI[4,KMC] blob
sn#180023 filedate 1975-10-04 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00007 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 BAR graph for up to 5 dimensions and creatures
C00003 00003 α GET DATA VALUES
C00005 00004 α Calculate X_DIF specifically since there is no call to X_AXIS
C00007 00005 α Draws STREET map to my house
C00009 00006 α ATLAS plots cities on a world map
C00012 00007 α This selects the requested routine
C00013 ENDMK
C⊗;
COMMENT BAR graph for up to 5 dimensions and creatures;
BEGIN
REQUIRE "DPYDEF.SAI[SEC,RCP]" SOURCE_FILE;
PROC BAR;
BEGIN
INTEGER J, NUMCOMP, NUMDIMS, MAX_NUM;
SAFE INTEGER ARRAY RATING[1:5,1:5];
STRING CAPT, VERTCAPTION;
SAFE STRING ARRAY COMPARED, DIMENSION[1:5];
MAX_NUM ← 5;
α GET DATA VALUES;
MIN_X ← MAX_X ← MIN_Y ← MAX_Y ← 0;
NUMCOMP ← GET_AN_INT("HOW MANY CREATURES COMPARED");
NUMCOMP ← 1 MAX NUMCOMP MIN MAX_NUM;
FOR I ← 1 TIL NUMCOMP DO
COMPARED[I] ← GET_A_STRING("CREATURE" ∂ CVS(I));
NUMDIMS ← GET_AN_INT("HOW MANY DIMENSIONS OF COMPARISON");
NUMDIMS ← 1 MAX NUMDIMS MIN MAX_NUM;
FOR I ← 1 TIL NUMDIMS DO
DIMENSION[I] ← GET_A_STRING("DIMENSION" ∂ CVS(I));
MAX_X ← (NUMCOMP + 1) * NUMDIMS + 1;
FOR I ← 1 TIL NUMCOMP DO
FOR J ← 1 TIL NUMDIMS DO
BEGIN
RATING[I, J] ← GET_AN_INT(COMPARED[I] ∂ DIMENSION[J]);
MAX_Y ← MAX_Y MAX RATING[I,J];
END;
α GET CAPTIONS;
VERTCAPTION ← GET_A_STRING("WHAT DO YOU CALL THE VERTICAL SCALE");
CAPT ← GET_A_STRING("WHAT DO YOU WANT FOR A CAPTION AT THE BOTTOM");
α PREPARE FOR CHARACTER DISPLAY;
DPYSET(PLOTCOM);
CHAR_INIT(3);
α SET SIZE AND LOCATION OF GRAPH;
SCREEN_INIT(7, 4);
α Calculate X_DIF specifically since there is no call to X_AXIS;
X_DIF ← MAX_X - MIN_X;
α MARK VERTICAL AXIS;
Y_AXIS;
α DRAW BORDER;
BOX(MIN_X, MIN_Y, X_DIF, Y_DIF, 0);
α VERTICAL CAPTION;
VERT_CAPTION(VERTCAPTION, 7, MAX_Y, MIN_Y);
α MOVE BELOW GRAPH FOR CAPTION;
FOR I ← 1 TIL NUMDIMS DO
CAPTION(DIMENSION[I], (I-1)*NUMCOMP + I, I*NUMCOMP + I, 2);
CHAR_INIT(CHAR_SIZE + 1);
CAPTION(CAPT, MIN_X, MAX_X, 4);
CHAR_INIT(CHAR_SIZE - 1);
α MOVE TO UPPER AREA FOR LEGEND;
FOR I ← 1 TIL NUMCOMP DO
BEGIN
BOX(1, MAX_Y - I * Y_DIF DIV 10, 1, Y_DIF DIV 12, I);
TEXT(COMPARED[I], 3, MAX_Y - I * Y_DIF DIV 10);
END;
α DRAW ALL BARS;
FOR I ← 1 TIL NUMDIMS DO
FOR J ← 1 TIL NUMCOMP DO
BOX((I-1)*(NUMCOMP+1) + J, MIN_Y, 1, RATING[J,I], J);
α DISPLAY THE BAR GRAPH;
DISPLAY("BAR");
END;
α Draws STREET map to my house;
PROC STREET_MAP;
BEGIN
MIN_X ← -505;
MAX_X ← 505;
MIN_Y ← -405;
MAX_Y ← 405;
X_DIF ← MAX_X - MIN_X;
Y_DIF ← MAX_Y - MIN_Y;
α PREPARE FOR CHARACTER DISPLAY;
DPYSET(PLOTCOM);
CHAR_INIT(3);
SCREEN_INIT(0, 0);
TEXT("Saturday, Oct 26", 100, -20);
TEXT("7:30 pm", 100, -40);
TEXT("545 Pettis Ave", 100, -60);
TEXT("968 - 9761", 100, -80);
STREET(100, 0, CHAR_X - 90, 214, -90, 214, "x");
STREET(-505, 400, 505, 400, -400, 400, "101");
STREET(-350, 240, 155, 240, -350, 240, "CALIFORNIA");
STREET(-140, 225, 20, 225, 20, 220, "MERCY");
STREET(-140, 210, 20, 210, 20, 205, "LATHAM");
STREET(-100, 195, -20, 195, -20, 190, "SNOW");
STREET(-505, 180, 505, 180, -420, 180, "EL CAMINO");
STREET(-505, -60, 505, -260, -400, -100, "FOOTHILL");
STREET(-505,-340, 505, -340, -400, -340, "280");
STREET(-500, 405,-500, -400, -505, 60, "ARASTRADERO");
STREET(- 90, 405, 0, 80, -150, 350, "STIERLIN-BAILEY");
STREET(-110, 280, -80, 180, -140, 270, "PETTIS");
STREET(-140, 180, -40, 0, -60, 40, "SPRINGER");
STREET(-100, 108,-100, -400, -140, -40, "EL MONTE");
STREET( 100, 405, 505, -60, 395, 80, "85");
DISPLAY("STREET");
END;
α ATLAS plots cities on a world map;
PROC ATLAS;
BEGIN
SAFE STRING ARRAY WORDS [1:300];
SAFE INTEGER ARRAY LATS [1:300, 0:1];
INTEGER SIZE, MAX_SIZE, NEAR;
STRING NEXT;
MAX_SIZE ← 300;
BREAK_TAB;
BREAK_EXT;
FILIN((FILE ← GET_A_STRING("Plot which ATLAS")), INCH1);
SIZE ← 0;
MIN_X ← 180;
MAX_X ← -180;
MIN_Y ← 90;
MAX_Y ← -90;
NEXT ← IN_LINE;
WHILE ¬EOF AND (SIZE < MAX_SIZE) DO
IF NEXT THEN
BEGIN
SIZE ← SIZE + 1;
WORDS[SIZE] ← SCAN(NEXT, 3, BRK);
LATS[SIZE, 0] ← SCAN_LONG(NEXT);
MIN_X ← MIN_X MIN LATS[SIZE, 0];
MAX_X ← MAX_X MAX LATS[SIZE, 0];
LATS[SIZE, 1] ← SCAN_LAT(NEXT);
MIN_Y ← MIN_Y MIN LATS[SIZE, 1];
MAX_Y ← MAX_Y MAX LATS[SIZE, 1];
NEXT ← IN_LINE;
END
ELSE NEXT ← IN_LINE;
IF ¬EOF THEN OUTSTR("Only first" ∂ CVS(MAX_SIZE) ∂ "cities plotted." ↓)
ELSE OUTSTR("There were" ∂ CVS(SIZE) ∂ "cities." ↓);
RELEASE(INCH1);
DPYSET(PLOTCOM);
CHAR_INIT(2);
SCREEN_INIT(9, 7);
Y_AXIS;
X_AXIS;
BOX(MIN_X, MIN_Y, X_DIF, Y_DIF, 0);
VERT_CAPTION("NORTH", 7, 90, 0);
VERT_CAPTION("SOUTH", 7, 0, -90);
VERT_CAPTION("LATITUDE", 9, 90, -90);
CAPTION("WEST", -180, 0, 5);
CAPTION("EAST", 0, 180, 5);
CAPTION("LONGITUDE", -180, 180, 7);
NEAR ← GET_AN_INT("Connect neighbors within __ degrees");
FOR I ← 1 TIL SIZE DO
BEGIN
INTEGER LOOK, BEST;
TEXT(WORDS[I][1 TO 1], LATS[I, 0], LATS[I, 1]);
BEST ← NEAR + 1;
FOR LOOK ← 1 TIL SIZE DO
IF LOOK ≠ I THEN
BEST ← BEST MIN (ABS(LATS[I,0] - LATS[LOOK,0]) +
ABS(LATS[I,1] - LATS[LOOK,1]));
IF BEST ≤ NEAR THEN
FOR LOOK ← 1 TIL SIZE DO
IF BEST = (ABS(LATS[I,0] - LATS[LOOK,0]) +
ABS(LATS[I,1] - LATS[LOOK,1])) THEN
LINE(LATS[I,0], LATS[I,1], LATS[LOOK,0], LATS[LOOK,1]);
END;
DISPLAY(SCAN(FILE, 7, BRK));
END;
α This selects the requested routine;
WHILE TRUE DO
BEGIN
STRING JOB;
BREAK_LINE;
JOB ← GET_A_STRING("Bar graph, Street map, Atlas, Display, eXit");
IF JOB = "B" THEN BAR
ELSE IF JOB = "S" THEN STREET_MAP
ELSE IF JOB = "A" THEN ATLAS
ELSE IF JOB = "D" THEN DISPLAY(NULL)
ELSE IF JOB = "X" THEN DONE
ELSE OUTSTR("You blew it" ↓);
END;
END